1、矩阵的路径
思想：dfs  找到起始点   然后遍历每个点的上下左右节点，直到都符合，这里运到了一个flag  
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param matrix char字符型vector<vector<>> 
     * @param word string字符串 
     * @return bool布尔型
     */
    int nextp[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    int flag=0;
    void dfs(vector<vector<char> >& matrix, string word,int curx,int cury,vector<vector<int>>& book,int row,int col,int index)
    {
        if(index==word.size()-1)
        {
            flag=1;
            return;
        }
        book[curx][cury]=1;
        index+=1;
        for(int i=0;i<4;i++)
        {
            int newx=curx+nextp[i][0];
            int newy=cury+nextp[i][1];
            if(newx<0||newx>=row||newy<0||newy>=col||book[newx][newy]||word[index]!=matrix[newx][newy])
                continue;
            else
            {
                dfs(matrix,word,newx,newy,book,row,col,index);
                //回溯
                book[newx][newy]=0;
            }
        }
    }
    bool hasPath(vector<vector<char> >& matrix, string word) {
        // write code here
        if(matrix.empty())
            return false;
        int row=matrix.size();
        int col=matrix[0].size();
        //由每个坐标开始探索是否有完整串
        for(int i=0;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {
                //找到符合起点
                if(matrix[i][j]==word[0])   
                {
                    //因为起点可能不止一个，所以每个起点都应该有一个数组
                    vector<vector<int>> book(row,vector<int>(col,0));
                    dfs(matrix,word,i,j,book,row,col,0);
                    if(flag)
                        return true;
                }
            }
        }
        return false;
    }
};